package com.sye.proxymodule.staticc;

import org.junit.Test;

/**
 * 静态代理的客户端测试调用
 * 按照代理类的创建时期，可分为静态代理和动态代理：
 *   静态：由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。
 *   动态：在程序运行时运用反射机制动态创建而成。
 *
 * 静态代理有两个缺点:
 *   1）代理类和委托类实现了相同的接口，代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。如果接口增加一个方法，
 *      除了所有实现类需要实现这个方法外，所有代理类也需要实现此方法。增加了代码维护的复杂度。
 *   2）代理对象只服务于一种类型的对象，如果要服务多类型的对象。势必要为每一种对象都进行代理，静态代理在程序规模稍大时就无法胜任了。
 *      如上的代码是只为AbstractObject类的访问提供了代理，但是如果还要为其他类提供代理的话，就需要我们再次添加代理类。
 */
public class Client {
    @Test
    public void execStaticProxy(){
        /**
         * ProxyObject代理的就是RealObject
         */
        AbstractObject abstractObject = new ProxyObject(new RealObject());
        abstractObject.operation();
    }
}
